<?php
/**
 * 管理员Service
 * Date: 2025/09/08
 */

namespace App\Services\Admin;

use App\Models\AdminModel;
use App\Services\BaseService;

class AdminService extends BaseService
{
    /**
     * 管理员列表
     * @date 2025/09/08
     * @param array $params 请求参数
     * @return \Illuminate\Http\JsonResponse
     */
    public function list($params)
    {
        $data = AdminModel::query()
            ->select(['id', 'account', 'avatar', 'name', 'email', 'phone', 'status', 'created_at'])
            ->where('is_super', AdminModel::IS_SUPER_NO)
            ->when(isset($params['account']) && $params['account'] != '', function ($query) use ($params) {
                $query->where('account', 'like', '%' . $params['account'] . '%');
            })
            ->when(isset($params['status']) && !empty($params['status']), function ($query) use ($params) {
                $query->where('status', $params['status']);
            })
            ->orderBy('id', 'desc')
            ->paginate($params['size'] ?? config('project.size'));
        return $this->success([
            'list' => $data->items(),
            'meta' => [
                'total' => $data->total(),
                'size'  => $data->perPage(),
                'page'  => $data->currentPage()
            ]
        ]);
    }

    /**
     * 管理员创建
     * @date 2025/09/08
     * @param array $params 请求参数
     * @return \Illuminate\Http\JsonResponse
     */
    public function create($params)
    {
        // 检测账号
        if (AdminModel::query()->where('account', $params['account'])->exists()) {
            return $this->failed('账号已经存在');
        }

        // 管理员创建
        AdminModel::query()->create([
            'account' => $params['account'],
            'password' => password_hash($params['password'], PASSWORD_BCRYPT),
            'avatar' => $params['avatar'] ?? '',
            'name' => $params['name'] ?? '',
            'email' => $params['email'] ?? '',
            'phone' => $params['phone'] ?? '',
            'is_super' => AdminModel::IS_SUPER_NO,
            'status' => $params['status']
        ]);
        return $this->success();
    }

    /**
     * 管理员详情
     * @date 2025/09/08
     * @param int $id 管理员主键ID
     * @return \Illuminate\Http\JsonResponse
     */
    public function detail($id)
    {
        // 检测管理员信息
        if (!AdminModel::query()->where('is_super', AdminModel::IS_SUPER_NO)->where('id', $id)->exists()) {
            return $this->failed('管理员不存在');
        }

        // 管理员详情
        $adminInfo = AdminModel::query()
            ->select(['id', 'account', 'avatar', 'name', 'email', 'phone', 'status'])
            ->where('id', $id)
            ->first();
        return $this->success($adminInfo);
    }

    /**
     * 管理员更新
     * @date 2025/09/08
     * @param array $params 请求参数
     * @return \Illuminate\Http\JsonResponse
     */
    public function update($params)
    {
        // 检测管理员信息
        if (!AdminModel::query()->where('is_super', AdminModel::IS_SUPER_NO)->where('id', $params['id'])->exists()) {
            return $this->failed('管理员不存在');
        }

        // 管理员更新
        AdminModel::query()->where('id', $params['id'])->update([
            'avatar' => $params['avatar'] ?? '',
            'name' => $params['name'] ?? '',
            'email' => $params['email'] ?? '',
            'phone' => $params['phone'] ?? '',
            'status' => $params['status']
        ]);
        return $this->success();
    }

    /**
     * 管理员删除
     * @date 2025/09/08
     * @param int $id 管理员主键ID
     * @return \Illuminate\Http\JsonResponse
     */
    public function delete($id)
    {
        // 检测管理员信息
        if (!AdminModel::query()->where('is_super', AdminModel::IS_SUPER_NO)->where('id', $id)->exists()) {
            return $this->failed('管理员不存在');
        }

        // 管理员删除
        AdminModel::query()->where('id', $id)->delete();
        return $this->success();
    }

    /**
     * 管理员重置密码
     * @date 2025/09/08
     * @param int $id 管理员主键ID
     * @return \Illuminate\Http\JsonResponse
     */
    public function reset($id)
    {
        // 检测管理员信息
        if (!AdminModel::query()->where('is_super', AdminModel::IS_SUPER_NO)->where('id', $id)->exists()) {
            return $this->failed('管理员不存在');
        }

        // 管理员重置密码
        AdminModel::query()->where('id', $id)->update([
            'password' => password_hash('123456', PASSWORD_BCRYPT),
        ]);
        return $this->success(['new_password' => '123456']);
    }
}
